93652b1ae5c99ec558edaeffd8672e4f25bd8f38,source/jetbrains/mps/helgins/inference/EquationManager.java,EquationManager,solveInequations,#,267
Before Change
}
//3. a->b, b->a => a = b
for (SNode node : subtypingGraphVertices()) {
Set<SNode> supertypes = mySubtypesToSupertypesMap.get(node);
if (supertypes == null) continue;
for (SNode supertype : new HashSet<SNode>(supertypes)) {
Set<SNode> supertypesSupertypes = mySubtypesToSupertypesMap.get(supertype);
After Change
//3. a->b, b->a => a = b
for (SNode node : subtypingGraphVertices()) {
Map<SNode,SNode> supertypes = mySubtypesToSupertypesMap.get(node);
if (supertypes == null) continue;
for (SNode supertype : new HashSet<SNode>(supertypes.keySet())) {
Map<SNode,SNode> supertypesSupertypes = mySubtypesToSupertypesMap.get(supertype);
if (supertypesSupertypes == null) continue;
for (SNode supertypesSubtype : supertypesSupertypes.keySet()) {
if (supertypesSubtype == node) {
addEquation(node, supertype, supertypesSupertypes.get(supertypesSubtype));
}
}
}
}
//4. {}->c->{S} => c = lcs({S})
outer: for (SNode node : subtypingGraphVertices()) {
if (node instanceof RuntimeTypeVariable) {
Map<SNode,SNode> subtypes = mySupertypesToSubtypesMap.get(node);
if (subtypes == null) continue;
Set<SNode> concreteSubtypes = new HashSet<SNode>();
Set<SNode> nodesToCheck = new HashSet<SNode>();
for (SNode subtype : new HashSet<SNode>(subtypes.keySet())) {
if (subtype instanceof RuntimeTypeVariable) {
continue; // outer;
}
concreteSubtypes.add(subtype);
nodesToCheck.add(subtypes.get(subtype));
subtypes.remove(subtype);
mySubtypesToSupertypesMap.get(subtype).remove(node);
}